1 Load Package

# install.packages("")
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.5     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.8
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   1.4.0     ✔ forcats 0.5.1
## Warning: package 'tidyr' was built under R version 4.0.5
## Warning: package 'dplyr' was built under R version 4.0.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(patchwork) # for muoltiple plots

2 Data

2.3 Read Data

skip first 2 rows

Victoria_pop_age_gender_2021 <- read.csv("Pop-Age-Gender-Victoria-2021-Census-2021A00055917034_5.csv", 
                                         skip = 2, header = T)
BC_pop_2021 <- read.csv("BC-Pop-2021A000259_6.csv", 
                                         skip = 2, header = T)
Canada_senior_pop_2021 <- read.csv("Canada-Senior-pop-percentage-2021A000259_5.csv", 
                                         skip = 2, header = T)

skip last 12 rows

Victoria_pop_age_gender_2021 <- head(Victoria_pop_age_gender_2021, -12)
BC_pop_2021 <- head(BC_pop_2021, -12)
Canada_senior_pop_2021 <- head(Canada_senior_pop_2021, -12)

2.4 Analyze data

class(Victoria_pop_age_gender_2021)
## [1] "data.frame"
str(Victoria_pop_age_gender_2021)
## 'data.frame':    42 obs. of  3 variables:
##  $ Age.groups       : chr  "0 to 4" "0 to 4" "5 to 9" "5 to 9" ...
##  $ Gender           : chr  "Women+" "Men+" "Women+" "Men+" ...
##  $ Population.counts: int  1400 1510 1440 1395 1365 1340 1340 1375 3475 2565 ...
colnames(Victoria_pop_age_gender_2021)
## [1] "Age.groups"        "Gender"            "Population.counts"
print(Victoria_pop_age_gender_2021)
##    Age.groups Gender Population.counts
## 1      0 to 4 Women+              1400
## 2      0 to 4   Men+              1510
## 3      5 to 9 Women+              1440
## 4      5 to 9   Men+              1395
## 5    10 to 14 Women+              1365
## 6    10 to 14   Men+              1340
## 7    15 to 19 Women+              1340
## 8    15 to 19   Men+              1375
## 9    20 to 24 Women+              3475
## 10   20 to 24   Men+              2565
## 11   25 to 29 Women+              4525
## 12   25 to 29   Men+              4235
## 13   30 to 34 Women+              4490
## 14   30 to 34   Men+              4545
## 15   35 to 39 Women+              3635
## 16   35 to 39   Men+              3820
## 17   40 to 44 Women+              2945
## 18   40 to 44   Men+              3035
## 19   45 to 49 Women+              2570
## 20   45 to 49   Men+              2635
## 21   50 to 54 Women+              2705
## 22   50 to 54   Men+              2640
## 23   55 to 59 Women+              2895
## 24   55 to 59   Men+              2665
## 25   60 to 64 Women+              3205
## 26   60 to 64   Men+              2755
## 27   65 to 69 Women+              3345
## 28   65 to 69   Men+              2675
## 29   70 to 74 Women+              3230
## 30   70 to 74   Men+              2675
## 31   75 to 79 Women+              2015
## 32   75 to 79   Men+              1685
## 33   80 to 84 Women+              1430
## 34   80 to 84   Men+               985
## 35   85 to 89 Women+              1065
## 36   85 to 89   Men+               605
## 37   90 to 94 Women+               890
## 38   90 to 94   Men+               350
## 39   95 to 99 Women+               275
## 40   95 to 99   Men+                80
## 41       100+ Women+                40
## 42       100+   Men+                10
glimpse(Victoria_pop_age_gender_2021)
## Rows: 42
## Columns: 3
## $ Age.groups        <chr> "0 to 4", "0 to 4", "5 to 9", "5 to 9", "10 to 14", …
## $ Gender            <chr> "Women+", "Men+", "Women+", "Men+", "Women+", "Men+"…
## $ Population.counts <int> 1400, 1510, 1440, 1395, 1365, 1340, 1340, 1375, 3475…
class(BC_pop_2021)
## [1] "data.frame"
str(BC_pop_2021)
## 'data.frame':    42 obs. of  3 variables:
##  $ Age.groups       : chr  "0 to 4" "0 to 4" "5 to 9" "5 to 9" ...
##  $ Gender           : chr  "Women+" "Men+" "Women+" "Men+" ...
##  $ Population.counts: int  105805 111015 118485 125810 123365 132425 122445 131245 143145 151505 ...
colnames(BC_pop_2021)
## [1] "Age.groups"        "Gender"            "Population.counts"
print(BC_pop_2021)
##    Age.groups Gender Population.counts
## 1      0 to 4 Women+            105805
## 2      0 to 4   Men+            111015
## 3      5 to 9 Women+            118485
## 4      5 to 9   Men+            125810
## 5    10 to 14 Women+            123365
## 6    10 to 14   Men+            132425
## 7    15 to 19 Women+            122445
## 8    15 to 19   Men+            131245
## 9    20 to 24 Women+            143145
## 10   20 to 24   Men+            151505
## 11   25 to 29 Women+            166585
## 12   25 to 29   Men+            170500
## 13   30 to 34 Women+            179660
## 14   30 to 34   Men+            178925
## 15   35 to 39 Women+            178175
## 16   35 to 39   Men+            175175
## 17   40 to 44 Women+            163260
## 18   40 to 44   Men+            156480
## 19   45 to 49 Women+            160515
## 20   45 to 49   Men+            149520
## 21   50 to 54 Women+            170460
## 22   50 to 54   Men+            158540
## 23   55 to 59 Women+            183825
## 24   55 to 59   Men+            172520
## 25   60 to 64 Women+            184920
## 26   60 to 64   Men+            170210
## 27   65 to 69 Women+            166700
## 28   65 to 69   Men+            152705
## 29   70 to 74 Women+            141995
## 30   70 to 74   Men+            130370
## 31   75 to 79 Women+             95015
## 32   75 to 79   Men+             86060
## 33   80 to 84 Women+             65780
## 34   80 to 84   Men+             55285
## 35   85 to 89 Women+             42005
## 36   85 to 89   Men+             32315
## 37   90 to 94 Women+             23120
## 38   90 to 94   Men+             13720
## 39   95 to 99 Women+              6925
## 40   95 to 99   Men+              2865
## 41       100+ Women+              1185
## 42       100+   Men+               330
glimpse(BC_pop_2021)
## Rows: 42
## Columns: 3
## $ Age.groups        <chr> "0 to 4", "0 to 4", "5 to 9", "5 to 9", "10 to 14", …
## $ Gender            <chr> "Women+", "Men+", "Women+", "Men+", "Women+", "Men+"…
## $ Population.counts <int> 105805, 111015, 118485, 125810, 123365, 132425, 1224…

3 Data cleaning

3.1 Change values for Women+ Men+

Victoria_pop_age_gender_2021[Victoria_pop_age_gender_2021 == "Women+"] <- "Women"
Victoria_pop_age_gender_2021[Victoria_pop_age_gender_2021 == "Men+"] <- "Men"

BC_pop_2021[BC_pop_2021 == "Women+"] <- "Women"
BC_pop_2021[BC_pop_2021 == "Men+"] <- "Men"

3.2 Change column name

colnames(Victoria_pop_age_gender_2021) <- c("age_group", "gender", "pop")
colnames(BC_pop_2021) <- c("age_group", "gender", "pop")

3.3 Sort values of age_group to ensure 100+ appears in correct position

Victoria_pop_age_gender_2021$age_group <- factor(Victoria_pop_age_gender_2021$age_group, 
      levels = str_sort(unique(Victoria_pop_age_gender_2021$age_group), numeric = TRUE))
str(Victoria_pop_age_gender_2021)
## 'data.frame':    42 obs. of  3 variables:
##  $ age_group: Factor w/ 21 levels "0 to 4","5 to 9",..: 1 1 2 2 3 3 4 4 5 5 ...
##  $ gender   : chr  "Women" "Men" "Women" "Men" ...
##  $ pop      : int  1400 1510 1440 1395 1365 1340 1340 1375 3475 2565 ...
BC_pop_2021$age_group <- factor(BC_pop_2021$age_group, 
      levels = str_sort(unique(BC_pop_2021$age_group), numeric = TRUE))
str(BC_pop_2021)
## 'data.frame':    42 obs. of  3 variables:
##  $ age_group: Factor w/ 21 levels "0 to 4","5 to 9",..: 1 1 2 2 3 3 4 4 5 5 ...
##  $ gender   : chr  "Women" "Men" "Women" "Men" ...
##  $ pop      : int  105805 111015 118485 125810 123365 132425 122445 131245 143145 151505 ...

4 Senior Age Groups

4.1 Select rows by value

Victoria_pop_age_gender_2021_seniors <- 
  Victoria_pop_age_gender_2021[Victoria_pop_age_gender_2021$age_group %in%
          c("55 to 59", "60 to 64", "65 to 69", "70 to 74", "75 to 79", 
            "80 to 84", "85 to 89", "90 to 94", "95 to 99", "100+"), ]

BC_pop_2021_seniors <- 
  BC_pop_2021[BC_pop_2021$age_group %in%
          c("55 to 59", "60 to 64", "65 to 69", "70 to 74", "75 to 79", 
            "80 to 84", "85 to 89", "90 to 94", "95 to 99", "100+"), ]

5 Pivot wider

Victoria_pop_age_gender_2021_wide <- Victoria_pop_age_gender_2021 %>%
  pivot_wider(names_from = gender, values_from = pop)

6 Analyze wider data

class(Victoria_pop_age_gender_2021_wide)
## [1] "tbl_df"     "tbl"        "data.frame"
str(Victoria_pop_age_gender_2021_wide)
## tibble [21 × 3] (S3: tbl_df/tbl/data.frame)
##  $ age_group: Factor w/ 21 levels "0 to 4","5 to 9",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Women    : int [1:21] 1400 1440 1365 1340 3475 4525 4490 3635 2945 2570 ...
##  $ Men      : int [1:21] 1510 1395 1340 1375 2565 4235 4545 3820 3035 2635 ...
colnames(Victoria_pop_age_gender_2021_wide)
## [1] "age_group" "Women"     "Men"
print(Victoria_pop_age_gender_2021_wide)
## # A tibble: 21 × 3
##    age_group Women   Men
##    <fct>     <int> <int>
##  1 0 to 4     1400  1510
##  2 5 to 9     1440  1395
##  3 10 to 14   1365  1340
##  4 15 to 19   1340  1375
##  5 20 to 24   3475  2565
##  6 25 to 29   4525  4235
##  7 30 to 34   4490  4545
##  8 35 to 39   3635  3820
##  9 40 to 44   2945  3035
## 10 45 to 49   2570  2635
## # … with 11 more rows
glimpse(Victoria_pop_age_gender_2021_wide)
## Rows: 21
## Columns: 3
## $ age_group <fct> 0 to 4, 5 to 9, 10 to 14, 15 to 19, 20 to 24, 25 to 29, 30 t…
## $ Women     <int> 1400, 1440, 1365, 1340, 3475, 4525, 4490, 3635, 2945, 2570, …
## $ Men       <int> 1510, 1395, 1340, 1375, 2565, 4235, 4545, 3820, 3035, 2635, …

7 Sort values of age_group to ensure 100+ appears in correct position

factor, str_sort unique

Victoria_pop_age_gender_2021_wide$age_group <- factor(Victoria_pop_age_gender_2021_wide$age_group, 
  levels = str_sort(unique(Victoria_pop_age_gender_2021_wide$age_group), numeric = TRUE))
str(Victoria_pop_age_gender_2021_wide)
## tibble [21 × 3] (S3: tbl_df/tbl/data.frame)
##  $ age_group: Factor w/ 21 levels "0 to 4","5 to 9",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Women    : int [1:21] 1400 1440 1365 1340 3475 4525 4490 3635 2945 2570 ...
##  $ Men      : int [1:21] 1510 1395 1340 1375 2565 4235 4545 3820 3035 2635 ...

8 Row index number

Victoria_pop_age_gender_2021_wide$index <- as.numeric(row.names(Victoria_pop_age_gender_2021_wide))
Victoria_pop_age_gender_2021_wide[order(Victoria_pop_age_gender_2021_wide$index), ]
## # A tibble: 21 × 4
##    age_group Women   Men index
##    <fct>     <int> <int> <dbl>
##  1 0 to 4     1400  1510     1
##  2 5 to 9     1440  1395     2
##  3 10 to 14   1365  1340     3
##  4 15 to 19   1340  1375     4
##  5 20 to 24   3475  2565     5
##  6 25 to 29   4525  4235     6
##  7 30 to 34   4490  4545     7
##  8 35 to 39   3635  3820     8
##  9 40 to 44   2945  3035     9
## 10 45 to 49   2570  2635    10
## # … with 11 more rows

9 Plot data

9.1 plot

plot(Victoria_pop_age_gender_2021)

9.2 ggplot data stacked bar Victoria, BC

PROBLEM: age grouping not correct e.g. 100+ comes after 10 to 14 >>
Sort values of age_group to ensure 100+ appears in correct position
factor, str_sort unique

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

Vic_1 <- Victoria_pop_age_gender_2021 %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", alpha = 0.95, width = 0.85)  + # width = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "Victoria, BC Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_1 

9.3 ggplot data stacked bar British Columbia

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

BC <- BC_pop_2021 %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", alpha = 0.95, width = 0.85)  + # width = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "BC Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021") + 
  scale_y_continuous(limits = c(0, 400000), labels = scales::comma) 
        # to avoid scientific notation
BC

9.4 ggplot data stacked column with labels for BC

need to find the cumulative sum for each stack
https://r-graphics.org/recipe-bar-graph-labels#cb84-7

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe

# get cumulative sum
BC_pop_2021 <- BC_pop_2021 %>%
  group_by(age_group) %>% 
  mutate(label_y = cumsum(pop))

colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

BC_lab <- BC_pop_2021 %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_col()  + 
  geom_text(aes(y = label_y, label = pop), vjust = 1.25, size = 2) +
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "bottom"
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "BC Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021") + 
  scale_y_continuous(limits = c(0, 400000), labels = scales::comma) 
BC_lab

9.5 ggplot data stacked column with labels

need to find the cumulative sum for each stack
https://r-graphics.org/recipe-bar-graph-labels#cb84-7

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe

# get cumulative sum
Victoria_pop_age_gender_2021 <- Victoria_pop_age_gender_2021 %>%
  group_by(age_group) %>% 
  mutate(label_y = cumsum(pop))

colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

Vic_lab <- Victoria_pop_age_gender_2021 %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_col()  + 
  geom_text(aes(y = label_y, label = pop), vjust = 1.25, size = 3) +
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "bottom"
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "Victoria, BC Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_lab

9.6 ggplot data - Victoria BC

PROBLEM: age grouping not correct e.g. 100+ comes after 10 to 14 >>
Sort values of age_group to ensure 100+ appears in correct position
factor, str_sort unique

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

Vic_dodge <- Victoria_pop_age_gender_2021 %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", position = position_dodge(), alpha = 0.95, width = 0.85)  + 
              # width = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "Victoria, BC Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_dodge

9.7 ggplot data - BC

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

BC_dodge <- BC_pop_2021 %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", position = position_dodge(), alpha = 0.95, width = 0.85)  + 
              # width = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "BC Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021") + 
  scale_y_continuous(limits = c(0, 200000), labels = scales::comma) 
BC_dodge

9.8 ggplot data for seniors - Victoria

PROBLEM: age grouping not correct e.g. 100+ comes after 10 to 14 >>
Sort values of age_group to ensure 100+ appears in correct position
factor, str_sort unique

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

Vic_seniors <- Victoria_pop_age_gender_2021_seniors %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", position = position_dodge(), alpha = 0.95, width = 0.85)  + 
                      # wideth = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "Victoria, BC Seniors Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_seniors

9.9 ggplot data for seniors

PROBLEM: age grouping not correct e.g. 100+ comes after 10 to 14 >>
Sort values of age_group to ensure 100+ appears in correct position
factor, str_sort unique

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

BC_seniors <- BC_pop_2021_seniors %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", position = position_dodge(), alpha = 0.95, width = 0.85)  + 
                      # wideth = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "BC Seniors Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
BC_seniors

9.10 ggplot data for seniors with data labels

https://intellipaat.com/community/16343/how-to-put-labels-over-geombar-for-each-bar-in-r-with-ggplot2

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

Vic_seniors_lab <- Victoria_pop_age_gender_2021_seniors %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", position = "dodge", alpha = 0.95, width = 0.85)  + 
                        # wideth = 1 no space between bars
  geom_text(aes(label = pop), size = 3, position = position_dodge(width = 0.9), vjust = -0.25) + 
                                    # vjust negative shows above bar
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1)
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "Victoria, BC Seniors Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_seniors_lab

9.11 ggplot data for seniors with data labels, legend at bottom

https://intellipaat.com/community/16343/how-to-put-labels-over-geombar-for-each-bar-in-r-with-ggplot2

# colour_palette <- c("#d8b365", "#5ab4ac") # Colour brewer color-blind safe
colour_palette <- c("#af8dc3", "#7fbf7b") # Colour brewer color-blind safe

Vic_seniors_lab_leg_bot <- Victoria_pop_age_gender_2021_seniors %>%
  ggplot(aes(x = age_group, y = pop, fill = gender)) +
  geom_bar(stat = "identity", position = "dodge", alpha = 0.95, width = 0.85)  + 
                            # wideth = 1 no space between bars
  geom_text(aes(label = pop), size = 3, position = position_dodge(width = 0.9), vjust = -0.25) + 
                                # vjust negative shows above bar
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    legend.position = "bottom"
    ) +
  scale_fill_manual(values = colour_palette) +
  labs(title = "Victoria, BC Seniors Population \n by Age & Gender",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_seniors_lab_leg_bot

9.12 ggplot data for pivot wide Women

PROBLEM: age grouping not correct e.g. 100+ comes after 10 to 14

Vic_women <- Victoria_pop_age_gender_2021_wide %>%
  ggplot(aes(x = age_group, y = Women)) +
  geom_bar(stat = "identity", position = position_dodge(), 
           alpha = 0.75, width = 0.75, fill = "#d8b365")  + # wideth = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    ) +
  labs(title = "Victoria, BC Women Population by Age",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_women

9.13 ggplot data for pivot wide Men

PROBLEM: age grouping not correct e.g. 100+ comes after 10 to 14

Vic_men <- Victoria_pop_age_gender_2021_wide %>%
  ggplot(aes(x = age_group, y = Men)) +
  geom_bar(stat = "identity", position = position_dodge(), 
           alpha = 0.75, width = 0.75, fill = "#d8b365")  + # wideth = 1 no space between bars
  theme_light() +
  theme(
    plot.title = element_text(size = rel(2), face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = rel(.92), hjust = 0.5),
    axis.text.x = element_text(angle = 45, hjust = 1),
    ) +
  labs(title = "Victoria, BC Men's Population by Age",
       subtitle = "(2021 Canada Census)",
       x = "Age Group",
       y = "Population",
       caption = "Data: https://www12.statcan.gc.ca/census-recensement/2021")
Vic_men


10 Patchwork

BC + BC_dodge

BC_lab

Vic_lab + Vic_1

Vic_dodge + BC_dodge

Vic_men + Vic_women

BC_seniors + Vic_seniors

Vic_seniors + Vic_seniors_lab

Vic_seniors_lab + Vic_seniors_lab_leg_bot

Vic_seniors_lab /  Vic_seniors_lab_leg_bot


11 Session info

# to document specific packages used to run script
sessionInfo()
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Mojave 10.14.6
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] patchwork_1.1.1 forcats_0.5.1   stringr_1.4.0   dplyr_1.0.8    
##  [5] purrr_0.3.4     readr_1.4.0     tidyr_1.2.0     tibble_3.1.7   
##  [9] ggplot2_3.3.5   tidyverse_1.3.1
## 
## loaded via a namespace (and not attached):
##  [1] tidyselect_1.1.2 xfun_0.30        bslib_0.3.1      haven_2.5.0     
##  [5] colorspace_2.0-1 vctrs_0.3.8      generics_0.1.0   htmltools_0.5.2 
##  [9] yaml_2.2.1       utf8_1.2.1       rlang_1.0.2      jquerylib_0.1.4 
## [13] pillar_1.7.0     withr_2.4.2      glue_1.6.2       DBI_1.1.1       
## [17] dbplyr_2.1.1     modelr_0.1.8     readxl_1.3.1     lifecycle_1.0.1 
## [21] munsell_0.5.0    gtable_0.3.0     cellranger_1.1.0 rvest_1.0.0     
## [25] evaluate_0.15    labeling_0.4.2   knitr_1.39       fastmap_1.1.0   
## [29] fansi_0.5.0      highr_0.9        broom_0.8.0      Rcpp_1.0.7      
## [33] backports_1.1.10 scales_1.2.0     jsonlite_1.7.2   farver_2.1.0    
## [37] fs_1.5.2         hms_1.0.0        digest_0.6.27    stringi_1.6.2   
## [41] grid_4.0.2       cli_3.3.0        tools_4.0.2      magrittr_2.0.3  
## [45] sass_0.4.0.9000  crayon_1.4.1     pkgconfig_2.0.3  ellipsis_0.3.2  
## [49] xml2_1.3.2       reprex_2.0.0     lubridate_1.7.10 assertthat_0.2.1
## [53] rmarkdown_2.15   httr_1.4.2       rstudioapi_0.13  R6_2.5.0        
## [57] compiler_4.0.2